home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / commands / tset.c < prev    next >
C/C++ Source or Header  |  1990-07-23  |  2KB  |  104 lines

  1. /* tset - set the TERM variable        Author: Terrence Holm */
  2.  
  3. #include <sys/types.h>
  4. #include <string.h>
  5. #include <termcap.h>
  6. #include <unistd.h>
  7. #include <stdio.h>
  8.  
  9. #define  LINE_LENGTH  40    /* Max length in /etc/ttytype     */
  10. #define  TC_BUFFER  1024    /* Size of termcap(3) buffer     */
  11.  
  12. char *ttyname();
  13.  
  14. /****************************************************************/
  15. /*                                */
  16. /*    eval `tset  [ device_type ]`                */
  17. /*                                */
  18. /*    "device_type" is the new name for $TERM. If no        */
  19. /*    type is supplied then /etc/ttytype is scanned for    */
  20. /*    the current port.                    */
  21. /*                                */
  22. /*    This program returns the string:            */
  23. /*                                */
  24. /*        TERM= . . .                    */
  25. /*                                */
  26. /****************************************************************/
  27. /*                                */
  28. /*    Login(1) sets a default for $TERM, so for logging-in    */
  29. /*    to any terminal place the following in ".profile":    */
  30. /*                                */
  31. /*        eval `tset`                    */
  32. /*                                */
  33. /*    To change $TERM during a session:            */
  34. /*                                */
  35. /*        eval `tset device_type`                */
  36. /*                                */
  37. /****************************************************************/
  38.  
  39.  
  40.  
  41. main(argc, argv)
  42. int argc;
  43. char *argv[];
  44. {
  45.   char *name;
  46.   FILE *f;
  47.   char line[LINE_LENGTH];
  48.  
  49.  
  50.   if (argc > 2) {
  51.     fprintf(stderr, "Usage:  %s  [ device_type ]\n", argv[0]);
  52.     exit(1);
  53.   }
  54.   if (argc == 2) {
  55.     Find_Termcap(argv[1]);
  56.     exit(0);
  57.   }
  58.  
  59.   /* No terminal name supplied, so use the current device     */
  60.  
  61.   if ((name = ttyname(0)) == (char *) NULL)
  62.     Error("Can not determine the user's terminal");
  63.  
  64.   name += 5;            /* Chop off "/dev/" part     */
  65.  
  66.   /* Look up the default terminal type in /etc/ttytype         */
  67.  
  68.   if ((f = fopen("/etc/ttytype", "r")) == (FILE *) NULL)
  69.     Error("Can not open /etc/ttytype");
  70.  
  71.   while (fgets(line, LINE_LENGTH, f) != (char *) NULL) {
  72.     char *space = strchr(line, ' ');
  73.  
  74.     line[strlen(line) - 1] = '\0';    /* Remove '\n'         */
  75.  
  76.     if (strcmp(space + 1, name) == 0) {
  77.         *space = '\0';
  78.         Find_Termcap(line);
  79.         exit(0);
  80.     }
  81.   }
  82.  
  83.   Error("Can not find your terminal in /etc/ttytype");
  84. }
  85.  
  86. Find_Termcap(terminal)
  87. char *terminal;
  88. {
  89.   char termcap[TC_BUFFER];
  90.  
  91.   if (tgetent(termcap, terminal) != 1)
  92.     Error("No termcap for your terminal type");
  93.  
  94.   /* In real Unix the $TERMCAP would also be returned here  */
  95.   printf("TERM=%s;\n", terminal);
  96. }
  97.  
  98. Error(msg)
  99. char *msg;
  100. {
  101.   fprintf(stderr, "tset: %s\n", msg);
  102.   exit(1);
  103. }
  104.